Many communications systems use error-correcting codes. Specifically, error correcting codes compensate for the intrinsic unreliability of information transfer in these systems by introducing redundancy into the data stream. Low density parity check (LDPC) codes are a particular type of error correcting codes which use an iterative coding system. LDPC codes can be represented by bipartite graphs (often referred to as “Tanner graphs”), wherein a set of variable nodes corresponds to bits of a codeword, and a set of check nodes correspond to a set of parity-check constraints that define the code. A variable node and a check node are considered “neighbors” if they are connected by an edge in the graph. A bit sequence having a one-to-one association with the variable node sequence is a valid codeword if and only if, for each check node, the bits associated with all neighboring variable nodes sum to zero modulo two (i.e., they include an even number of 1's).
For example, FIG. 1A shows a bipartite graph 100 representing an exemplary LDPC code. The bipartite graph 100 includes a set of 5 variable nodes 110 (represented by circles) connected to 4 check nodes 120 (represented by squares). Edges in the graph 100 connect variable nodes 110 to the check nodes 120. FIG. 1B shows a matrix representation 150 of the bipartite graph 100. The matrix representation 150 includes a parity check matrix H and a codeword vector x, where x1-x5 represent bits of the codeword x. More specifically, the codeword vector x represents a valid codeword if and only if Hx=0. FIG. 2 graphically illustrates the effect of making three copies of the graph of FIG. 1A, for example, as described in commonly owned U.S. Pat. No. 7,552,097. Three copies may be interconnected by permuting like edges among the copies. If the permutations are restricted to cyclic permutations, then the resulting graph corresponds to a quasi-cyclic LDPC with lifting Z=3. The original graph from which three copies were made is referred to herein as the base graph.
A received LDPC codeword can be decoded to produce a reconstructed version of the original codeword. In the absence of errors, or in the case of correctable errors, decoding can be used to recover the original data unit that was encoded. LDPC decoder(s) generally operate by exchanging messages within the bipartite graph 100, along the edges, and updating these messages by performing computations at the nodes based on the incoming messages. For example, each variable node 110 in the graph 100 may initially be provided with a “soft bit” (e.g., representing the received bit of the codeword) that indicates an estimate of the associated bit's value as determined by observations from the communications channel. Using these soft bits the LDPC decoders may update messages by iteratively reading them, or some portion thereof, from memory and writing an updated message, or some portion thereof, back to, memory. The update operations are typically based on the parity check constraints of the corresponding LDPC code. In implementations for lifted LDPC codes, messages on like edges are often processed in parallel.
Many practical LDPC code designs use quasi-cyclic constructions with large lifting factors and relatively small base graphs to support high parallelism in encoding and decoding operations. Many LDPC codes also use a chain of degree two variable nodes in their construction. Such a degree two variable node chain, sometimes called an accumulate structure, yields simple encoding and good performance. LDPC code designs based on cyclic lifting can be interpreted as codes over the ring of polynomials modulo may be binary polynomials modulo xZ−1, where Z is the lifting size (e.g., the size of the cycle in the quasi-cyclic code). Thus encoding such codes can often be interpreted as an algebraic operation in this ring.